■ 文字列の送受信(PC-PIC間) (PIC32MZ2048ECH100編)
PIC側の ハード&ソフトは 文字列の送受信(PIC32MZ2048ECH100 Harmony)を参照願います
<試作品仕様>
・PCとターゲットボード間はUSB/RS232C変換ケーブルを使い PIC側からみてのインターフェースはRS232Cとする
・USB/RS232C変換ケーブルはUSBシリアルコンバーター REX-USB60F(ラトックシステム(株))とする
・RS232C通信は以下とする。
フロー制御なし、9600bps、ストップビットx1、パリティなし
・パソコン側より 下記送信文字列に対し PIC側は対応する文字列を返信すること
Japan ---> Tokyo
America ---> Washinton
U.K. ---> London
France --> Paris
その他 --> Pardon ?
・PC側は、受信文字列をテキストエディタに表示のこと
・PIC側は、 受信文字列 及び返信文字列をキャラクタ液晶のそれぞれ上段と下段に表示のこと
| プログラム | |||
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Kanji_PC_PIC
{
public partial class Form1 : Form
{
private int OpMode = 0; //0:文字列変換
//文字を変換するクラスを宣言
Encoding encSjis = Encoding.GetEncoding("shift-jis");
Encoding encUni = Encoding.GetEncoding("unicode");
public Form1()
{
InitializeComponent();
serialPort1.PortName = "COM3"; //COM1 ポート使用
// serialPort1.PortName = "COM1"; //COM1 ポート使用
serialPort1.BaudRate = 9600; //9600bps
serialPort1.Parity = System.IO.Ports.Parity.None; //パリティなし
serialPort1.DataBits = 8; //データ長 8ビット
serialPort1.StopBits = System.IO.Ports.StopBits.One; //ストップビット 1
serialPort1.ReadTimeout = 500; //500mse 読み込みタイムアウト時間
serialPort1.WriteTimeout = 500; //500msec書き込みタイムアウト時間
comboBox1.Items.Clear();
comboBox1.Items.Add("Japan");
comboBox1.Items.Add("America");
comboBox1.Items.Add("U.K.");
comboBox1.Items.Add("France");
comboBox1.Items.Add("I am fine");
comboBox1.SelectedIndex = 0;
}
delegate void ReceiveDelegate(string str);//デリゲート宣言
private void SetText(string str)
{
richTextBox1.AppendText(str);
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
byte[] byteRead = new byte[serialPort1.BytesToRead]; //受信文字
serialPort1.Read(byteRead, 0, serialPort1.BytesToRead);//読み込み
byte[] byteUni = Encoding.Convert(encSjis, encUni, byteRead); //shift-jis からunicodeに変換する
string strUni = encUni.GetString(byteUni); //配列を文字列に変換
ReceiveDelegate receiveDelegate = new ReceiveDelegate(SetText);
this.Invoke(receiveDelegate, strUni);
}
private void button2_Click(object sender, EventArgs e)
{
richTextBox1.Clear();
}
private void button1_Click_1(object sender, EventArgs e)
{
if (serialPort1.IsOpen == false) serialPort1.Open();//シリアルポートオープン
string strSend = comboBox1.Text;
if (!strSend.EndsWith("\r")) strSend += "\r"; //改行が無かったら \rを追加する
Byte[] byteArry = encSjis.GetBytes(strSend); //'送信文字をShift-jisに変換してをByte配列に格納
serialPort1.Write(byteArry, 0, byteArry.Length); //送信
}
private void timer1_Tick(object sender, EventArgs e)
{
if (OpMode == 1)
{
string strSend = "Data";
if (!strSend.EndsWith("\r")) strSend += "\r"; //改行が無かったら \rを追加する
Byte[] byteArry = encSjis.GetBytes(strSend); //'送信文字をShift-jisに変換してをByte配列に格納
serialPort1.Write(byteArry, 0, byteArry.Length); //送信
}
else
{
timer1.Enabled = false; //タイマ停止
}
}
}
}
|
|||
| 動作結果 | |||
| PC画面 | 液晶画面 上段: 受信文字列 下段: 返信文字列 |
||
| @ | コンボボックスで"Japan"を選択して送信後 "Tokyo"を受信した場合 | |
![]() |
| A | Japan America U.K. France I am fine を 順次送信した 結果 |
![]() |
![]() |
■ 文字列の送受信(PC-PIC間)
PIC32MZ評価ボード版PIC: PIC32MZ2048EFH100
(→VC#プロジェクトファイルダウンロード)
PIC側の ハード&ソフトは (→ URL )を参照願います
<試作品仕様>
・PCとターゲットボード間はUSB/RS232C変換ケーブルを使い PIC側からみてのインターフェースはRS232Cとする
・USB/RS232C変換ケーブルはUSBシリアルコンバーター REX-USB60F(ラトックシステム(株))とする
・RS232C通信は以下とする。
フロー制御なし、9600bps、ストップビットx1、パリティなし
・パソコン側より 下記送信文字列に対し PIC側は対応する文字列を返信すること
Japan ---> Tokyo
America ---> Washinton
U.K. ---> London
France --> Paris
その他 --> Pardon ?
・PC側は、受信文字列をテキストエディタに表示のこと
・PIC側は、 受信文字列 及び返信文字列をキャラクタ液晶のそれぞれ上段と下段に表示のこと
using System; |
|
| <動作結果> (→ 動画: 1080pのHD動画を見ることができます。) ![]() |